A significant gap exists between high level, object-oriented software and the hardware that it runs on. Current microprocessors do not have any mechanisms to protect against significant errors that occur in software programs, for example, array out-of-bounds accesses, attempts to dereference a null pointer, and use of un-initialized variables. Errors such as these account for the majority of security faults that exist in both commercial and non commercial software applications. The effort to avoid making these errors, as well as the effort required to find and fix them once they occur, creates a huge productivity drain.
It is therefore desirable to provide for improved capability to avoid errors such as those described above.